package co.edu.usbcali.unidades.presentation.backingBeans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import co.edu.usbcali.unidades.exceptions.ZMessManager;
import co.edu.usbcali.unidades.modelo.Administrador;
import co.edu.usbcali.unidades.modelo.PropietarioInmueble;
import co.edu.usbcali.unidades.modelo.UnidadResidencial;
import co.edu.usbcali.unidades.modelo.Usuario;
import co.edu.usbcali.unidades.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidades.utilities.FacesUtils;

import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.ext.HtmlSelectOneRadio;

public class InicioView {

	private HtmlInputText txtLogin;
	private HtmlInputText txtPassword;
	private HtmlSelectOneRadio radioSelecionado;
	private HtmlCommandButton btnIngresar;

	private HtmlSelectOneMenu cmbUnidades;
	private List<SelectItem> list_unidades = new ArrayList<SelectItem>();
	List<UnidadResidencial> unidades = new ArrayList<UnidadResidencial>();

	Usuario usu;

	public String action_iniciarSesion() throws Exception {
		return iniciarSesion();
	}

	/*
	 * public void action_iniciarSesionEvent(ValueChangeEvent event){
	 * iniciarSesion(); }
	 */

	private String iniciarSesion() {
		String mensaje = "";
		Administrador admin;
		PropietarioInmueble prop;
		try {
			String txtUsu = FacesUtils.checkString(txtLogin);
			String txtCon = FacesUtils.checkString(txtPassword);

			List<Usuario> u = BusinessDelegatorView.getUsuarioParametro(txtUsu,
					txtCon);

			if (u.size() != 0) {
				usu = u.get(0);
				admin = BusinessDelegatorView.getAdministradorCedula(u.get(0)
						.getPersona().getPerCedula());
				prop = BusinessDelegatorView.getPropietarioCedula(u.get(0)
						.getPersona().getPerCedula());
				if (admin != null && prop != null) {
					FacesUtils.getSession().setAttribute("usuario", usu);
					FacesUtils.getSession().setAttribute("TipoUsuario",
							usu.getTipoUsuario().getTpuCodigo());
					return "goSeleccionRol";
				}

				if (admin != null) {
					unidades = BusinessDelegatorView.getUnidadesAdmin(admin
							.getAdmCodigo());
					if (unidades.size() > 1) {
						FacesUtils.getSession().setAttribute("usuario", usu);
						FacesUtils.getSession().setAttribute("TipoUsuario",
								usu.getTipoUsuario().getTpuCodigo());
						return "goSeleccionUnidad";
					}
				}
				if (usu.getTipoUsuario().getTpuCodigo().equals("1")) {
					String codpro = "";
					codpro = action_darCodigo(usu.getPersona().getPerCedula());
					FacesUtils.getSession().setAttribute("codPro", codpro);
					FacesUtils.getSession().setAttribute("usuario", usu);
					FacesUtils.getSession().setAttribute("TipoUsuario",
							usu.getTipoUsuario().getTpuCodigo());
					return "goToPropietario";
				} else if (usu.getTipoUsuario().getTpuCodigo().equals("2")) {
					FacesUtils.getSession().setAttribute("usuario", usu);
					FacesUtils.getSession().setAttribute("TipoUsuario",
							usu.getTipoUsuario().getTpuCodigo());
					return "goToAdmin1";
				} else if (usu.getTipoUsuario().getTpuCodigo().equals("3")) {
					FacesUtils.getSession().setAttribute("usuario", usu);
					FacesUtils.getSession().setAttribute("TipoUsuario",
							usu.getTipoUsuario().getTpuCodigo());
					return "goToArrendatario";
				} else if (usu.getTipoUsuario().getTpuCodigo().equals("4")) {
					FacesUtils.getSession().setAttribute("usuario", usu);
					FacesUtils.getSession().setAttribute("TipoUsuario",
							usu.getTipoUsuario().getTpuCodigo());
					return "goToVigilante";
				} else if (usu.getTipoUsuario().getTpuCodigo().equals("5")) {
					String codAdmin = "";
					codAdmin = codigoAdmin(usu.getPersona().getPerCedula());
					FacesUtils.getSession().setAttribute("codAdminLoc",
							codAdmin);
					unidades = BusinessDelegatorView.getUnidadesAdmin(codAdmin);
					if (unidades.size() == 0) {
						throw new Exception(
								"Usted no tiene asignada una unidad");
					}
					FacesUtils.getSession().setAttribute("unidadNit",
							unidades.get(0).getUnrNit());
					FacesUtils.getSession().setAttribute("usuario", usu);
					FacesUtils.getSession().setAttribute("TipoUsuario",
							usu.getTipoUsuario().getTpuCodigo());
					return "goToAdmin2";
				}

				FacesUtils.getSession().setAttribute("usuario", usu);
				FacesUtils.getSession().setAttribute("TipoUsuario",
						usu.getTipoUsuario().getTpuCodigo());
			}

		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return mensaje;
	}

	public String action_cerrarSesion() throws Exception {

		FacesUtils.getSession().setAttribute("usuario", null);

		return "goInicio";
	}

	// Metodo que consulta el codigo del administrador local....
	public String codigoAdmin(String usuCedula) throws Exception {
		String codAdmin = "";
		try {
			codAdmin = BusinessDelegatorView.getCodigoAdmin(usuCedula);
		} catch (Exception e) {
			throw e;
		}
		return codAdmin;
	}

	// Pide El Codigo del PropietarioInmueble
	public String action_darCodigo(String usuCedula) throws Exception {
		String codigo = "";
		try {
			codigo = BusinessDelegatorView.getUsuarioParametro2(usuCedula);
		} catch (Exception e) {
			throw e;
		}
		return codigo;
	}
	
	
	public String action_seleccionUnidad()throws Exception{
		String mensaje = "";
		try {
			if (cmbUnidades.getValue().toString().equals("-1")){
				throw new Exception("Seleccione Una Unidad Para Iniciar Sesión");
			}
			FacesUtils.getSession().setAttribute("codAdminLoc",
					codigoAdmin(usu.getPersona().getPerCedula()));
			FacesUtils.getSession().setAttribute("unidadNit",
					cmbUnidades.getValue().toString());
			return "goAdmin2";
		}catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return mensaje;
	}
	

	public String action_seleccionRol() throws Exception {
		String mensaje = "";
		try {

			if (radioSelecionado.getValue() == null) {
				throw new Exception("Seleccione Un Rol Para Ingresar");
			}
			if (radioSelecionado.getValue().toString().equals("0")) {
				String codAdmin = "";
				codAdmin = codigoAdmin(usu.getPersona().getPerCedula());
				FacesUtils.getSession().setAttribute("codAdminLoc", codAdmin);
				List<UnidadResidencial> unidades = BusinessDelegatorView
						.getUnidadesAdmin(codAdmin);
				if (unidades.size() == 0) {
					throw new Exception("Usted no tiene asignada una unidad");
				}
				FacesUtils.getSession().setAttribute("unidadNit",
						unidades.get(0).getUnrNit());
				mensaje = "goToAdmin2";
			}
			if (radioSelecionado.getValue().toString().equals("1")) {
				String codpro = "";
				codpro = action_darCodigo(usu.getPersona().getPerCedula());
				FacesUtils.getSession().setAttribute("codPro", codpro);
				mensaje = "goToPropietario";
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}
		return mensaje;
	}

	public HtmlInputText getTxtLogin() {
		return txtLogin;
	}

	public void setTxtLogin(HtmlInputText txtLogin) {
		this.txtLogin = txtLogin;
	}

	public HtmlInputText getTxtPassword() {
		return txtPassword;
	}

	public void setTxtPassword(HtmlInputText txtPassword) {
		this.txtPassword = txtPassword;
	}

	public HtmlSelectOneRadio getRadioSelecionado() {
		return radioSelecionado;
	}

	public void setRadioSelecionado(HtmlSelectOneRadio radioSelecionado) {
		this.radioSelecionado = radioSelecionado;
	}

	public HtmlCommandButton getBtnIngresar() {
		return btnIngresar;
	}

	public void setBtnIngresar(HtmlCommandButton btnIngresar) {
		this.btnIngresar = btnIngresar;
	}

	public HtmlSelectOneMenu getCmbUnidades() {
		Administrador a;
		list_unidades.clear();
		try {
			a = BusinessDelegatorView.getAdministradorCedula(usu.getPersona().getPerCedula());
			unidades=BusinessDelegatorView.getUnidadesAdmin(a.getAdmCodigo());
			SelectItem item = new SelectItem(-1, "--Seleccione Una Unidad--");
			list_unidades.add(item);
			for (int i = 0; i < unidades.size(); i++) {
				item = new SelectItem(unidades.get(i).getUnrNit(),unidades.get(i).getUnrNombre());
				list_unidades.add(item);
			}
		} catch (Exception e) {
			
		}
		return cmbUnidades;
	}

	public void setCmbUnidades(HtmlSelectOneMenu cmbUnidades) {
		this.cmbUnidades = cmbUnidades;
	}

	public List<SelectItem> getList_unidades() {
		return list_unidades;
	}

	public void setList_unidades(List<SelectItem> listUnidades) {
		list_unidades = listUnidades;
	}

}
